稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!
让我们来看看Kubernetes是怎么解决这个问题的:如何将应用程序部署到云中,从而支持我们的基础架构以满足云转型需求。
记住你的目标
在云转型时代,所有公司都有以下目标:
尽快迁移到云(云迁移)。
减少系统管理员成本、基础架构成本、员工时间(降低成本)。
减少完成项目所需的时间(上市时间)。
具备性能良好(质量提高)的可靠系统。
有了这些目标,我们才可以登陆云端,然后问自己:“好了,那接下来要做什么?”
人们,尤其是那些第一次接触云的人,很容易迷失在各种各样的解决方案中。更糟的是,他们奉承只许成功,不许失败的理念。这不是在开玩笑,一个项目必须每天都向前运作,否则第二天它将会面对双倍的功能要求和集成需求。
这就是云转型困难的原因——就像在赛马中,你必须押注正确的那匹马,绝不能输。在接下来的步骤中,我们将学习为什么Kubernetes是那匹正确的马,以及为什么每个人都应该下注。
为什么要使用容器?
在问为什么要使用Kubernetes之前,我们必须先想想我们为什么需要使用容器。容器的诞生是软件开发中的一场重大革命,因为它将生产带入了本地环境。从此,无需再担心Linux或Windows系统的兼容性。有了容器,所有问题都可以在任何工作站中轻松发现。
此外,每个环境都是可移植的,不需要额外的工作。开发人员有打包应用程序的能力,这很好,因为他们能了解应用程序应如何工作。容器在DevOps方面也非常赞,因为系统部署都只处理一样东西:容器。
另外,所有构建过程都可以在开发端的Dockerfile文件中进行,这意味着你只需要使用一种方式进行构建,在本地开发和持续集成中也是如此。
容器意味着需要维护的东西更少、环境之间没有差异、矛盾摩擦也更少。
容器镜像在创建后被推送到注册表中,从这里,可以拉取镜像并将其部署到任何地方——你的桌面、虚拟机(本地或云中)或无服务器的解决方案(例如Heroku)。与虚拟机相比,容器的真正优势在于它虚拟化了操作系统,而不是资源。这意味着我们可以以一种更轻松、更简便、更经济的方式来托管应用程序。
为什么选择Kubernetes?
刚刚,我们解释了为什么每个人都要使用容器,但没有解释为什么我们需要Kubernetes。既然使用容器的必要性成为了既定的事实,那么新的问题出现了,该如何管理容器?怎样才能更好地协调这些容器?这些问题的答案就是Kubernetes。
借助Kubernetes,你只需要将镜像推送到docker存储库然后等待部署就可以了。所有部署工作都由Kubernetes进行管理,因此不必担心基础架构的问题。
Kubernetes是容器编排方案中的佼佼者。它是开源的,衍生于Google的经验。其基础架构使其能对容器进行编排并与老式系统集成。因此,你可以将其安装在本地或云中,甚至可以安装在混合云解决方案中。
因此,选择Kubernetes的原因是它是一种稳定、可靠、易于使用的解决方案。简而言之,这就是部署容器的最佳方法。
Kubernetes是否是无服务器框架?
Kubernetes是否就是无服务器框架?Kubernetes和无服务器框架比较起来是不同的。无服务器框架更像是一种理念,而Kubernetes更像是一种工具。让我们先回到最初的目标上来。之前提到,我们需要减少对操作系统的依赖和维护——这就是无服务器框架。
因此,问题在于Kubernetes是否可以实现这一目标?简单来讲:可以。详细描述的话就是:
严格来说,无服务器框架是在不用询问是谁在运行此代码的情况下进行部署,即使Kubernetes抽象隐藏了最复杂的部分,你也必须要了解一些关于服务器的事情。例如,你仍然要依赖每个容器的操作系统。内部运行的特定版本的Kubernetes是存在依赖性的。因此从理论上讲,Kubernetes并非没有无服务器框架。
但不管怎么说,让我们先看几个无服务器框架的解决方案吧。
Heroku依赖于容器。你也可以向其部署一个容器。大多数lambda函数在内部都有容器。
我们之所以不能将Kubernetes的云版本视为无服务器框架,是因为:它以容器为基础并且依赖于操作系统。可是,我们却认为具有相同功能的Heroku或lambda服务是无服务器框架的。
这就是为什么我认为Kubernetes是一种无服务器框架解决方案(即使严格意义上来讲并非如此)。现实世界不是非黑即白的,Kubernetes云版本提供给我的资源、抽象水平和相对于操作系统的独立性已经足以将其视为无服务器框架了。
我不想太较真。无论使用何种标签(无论是否使用服务器),Kubernetes都是一种能够轻松实现云计算、降低系统管理员成本、降低基础架构成本和范围并提高质量的好方法。因此,不必太在意标签,只要选择对自己有帮助就好。
Kubernetes的优势
Kubernetes是一个可以安全退出传统的虚拟机并进入云计算的好平台。它为我们带来活力、降低了系统管理员成本,并且将服务质量推到了其他任何方式都难以到达的水平。Kubernetes本身的高级配置可以解决许多传统问题,例如网络和数据保护。
以下是此解决方案能带来的一系列好处:
可扩展性:你只需要部署一个容器。然后,就可以毫不费力地设置扩展策略。唯一需要担心的是信用卡上的钱够不够。
透明度:每个容器都做一件事。容器之间的所有关系都会被映射到配置文件中,绝不会错过任何事情或隐藏某些行为。
节省时间:过程非常简单,任何步骤都易于复制。
版本控制:根据设计,每个部署都是版本化的。你可以轻松地将基础结构映射到可以在Git上进行版本控制的源文件中。
除此之外,Kubernetes简化了所有DevOps的工作。因为责任与透明度有明确的分离,所以开发人员和运营团队之间的摩擦会减少。
还有一些其他的小优势:
水平自动扩缩容:Kubernetes可以自动扩展,向集群中添加节点并调整可用的物理资源。此外,它还可以扩展逻辑资源,从而增加给定服务的Pod数量。
智能更新:每次更新容器镜像时,处处都都体现着细心和爱。只有在新的pod出现时,旧pod才会被销毁,这实现了零停机时间部署。
本地或云:除了云还有其他选项吗?有。我一直都更爱用完整的云解决方案,但是如果您需要本地部署,也不会有任何问题。
供应商锁定:公有云上的Kubernetes是一样的,如果你对供应商不满意,可以轻松地换一家。
无需后续学习:单击即可部署任意可容器化软件。这意味着你的开发人员不必学习新的知识。
总结
Kubernetes有很强的灵活性,并且你可以使用云方案轻松实现管理。当我发现它的时候,我就把它看作一种能够减少工作量和责任的有效且安全的解决方案。它具备传统基础架构的所有优点,无需重写应用程序即可轻松完成NoOps流程设置。
与其他许多闪光的解决方案(如无服务器框架)相比,Kubernetes似乎更加具体。无服务器框架很好,但是在复杂的场景中,使用起来并不容易。从逻辑上讲,要采用lambdas这样的边缘技术,就需要经历巨大的思想转变。众所周知,要强迫开发者们改变想法并不容易。
如今,大家都希望能够减少系统管理员方面的工作量、简化部署过程、让基础架构解决所有难题,而Kubernetes做到了。
如果我明天必须设计一个架构,尤其是针对企业的解决方案,那么我会优先选择容器和Kubernetes。或许使用云端Kubernetes来降低系统管理员的成本,或许使用基于Git上托管的配置文件的DevOps管道。
该解决方案很少依赖于操作系统,很少依赖于供应商,所有基础架构都依赖于代码。
有人可以说这不是完全NoOps,也不是完全无服务器。但它是稳定的、模块化的、可扩展的、并且满足最重要的设计目标。那么,为什么不使用Kubernetes呢?
我们能做得更好吗?当然!我们可以尽力减少压力吗?当然!我们永远都能做得更好,永远都能拥有更多的可能性。
但最终,Kubernetes是一个很好的折中方案。在大多数情况下,它能为成功提供保障。
一文读懂Docker及其对系统管理员的重要性 别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!! 25 岁的老 Delphi,还值得程序员入手吗? CNN vs RNN vs ANN——3种神经网络分析模型,你pick谁?
“不让一块芯片流向华为”?
男性玩家占78.8%、90后玩家占近50%、最多人选择中国风链游……《2019链游玩家需求调研报告》重磅发布!